home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / zpont311.lha / zpoint-3.11 / Rexx / RequestCL.zprx < prev    next >
Text File  |  1995-09-03  |  10KB  |  395 lines

  1. /*
  2.    $VER: RequestCL 1.13 (30.8.95) von Albert Weinert und Ralph Seichter
  3.  
  4.    Das Skript benötigt Jürgen Kohrmeyer's "rexxtricks.library" und
  5.    Ralph Seichter's "Zodiac's Point" V37.180 oder besser bzw. Oliver
  6.    Wagner's "MicroDot" V1.10 oder besser.
  7.  
  8.  
  9.    FUNKTIONSBESCHREIBUNG:
  10.  
  11.    1) Dieses Skript durchsucht eine 'Neue Files vom ...' Nachricht vom
  12.       Connectline-eigenen 'Mailer-Daemon' nach bestellbaren Dateien. Alle
  13.       gefundenen Dateien werden alphabetisch sortiert in einem Fenster auf
  14.       dem entsprechenden Screen dargestellt. Hier können Sie die gewünschten
  15.       Dateien bestellen, Multi-Select ist dabei möglich.
  16.  
  17.    2) Wenn in einer Nachricht die Header X-BIN-MSGID und X-BIN-BRETT
  18.       vorhandenen sind (So wie in den Inhalts-Nachrichten aus dem sehr guten
  19.       AmiNet Relay der Darkness.gun.de), wird die entsprechenden Binärnachricht
  20.       bestellt.
  21.  
  22.  
  23.    INSTALLATION:
  24.  
  25.    Bei Zodiac's Point:
  26.  
  27.       Kopieren sie dieses Skript unter dem Namen "RequestCL.zprx" ins
  28.       Rexx-Verzeichnis von ZP. Sie können es dann an das Gadget [Bestellen]
  29.       binden, indem Sie in der Datei "maps/request.zp" den Text
  30.  
  31.          .key FILE/A,SCREEN/A
  32.          .bra {
  33.          .ket }
  34.          Delete >NIL: {FILE}
  35.          Run >NIL: SYS:Rexxc/RX ZP:Rexx/RequestCL.zprx {SCREEN}
  36.  
  37.       eintragen (bitte passen Sie ggf. den Pfad für 'RX' an).
  38.  
  39.    Bei Microdot:
  40.  
  41.       Das Programm unter dem Namen "RequestCL.mdmrexx" in das Rexx
  42.       Verzeichnis von Microdot kopieren.
  43.  
  44.    ANPASSEN DES SKRIPTS:
  45.  
  46.    Am Anfang des Skripts können einige Parameter eingestellt werden:
  47.  
  48.    mapsadr     - Adresse des MAPS-Dienstes.
  49.  
  50.    maildemon   - Absendermuster für Mailer-Dämon.
  51.  
  52.    boardindex  - Betreffmuster für Inhaltsverzeichnisse von Brettern.
  53.  
  54.    requestcmd  - MAPS-Befehlt zum Bestellen von Nachrichten.
  55.  
  56.    msgidheader - Name des Headers in dem die Message-ID der zugehörigen
  57.                  Binärnachricht steht.
  58.  
  59.    boardheader - Name des Headers in dem der Brettname der zugehörigen
  60.                  Binärnachricht steht.
  61.  
  62.    usebrackets - Sollen MID-Klammern <> benutzt werden?
  63.  
  64.    board.count - Siehe Erklärung weiter unten.
  65.  
  66.    board.i.[p] - Parameter 'p' für Struktur mit Index 'i'. Für 'p' sind
  67.                  die folgenden Einträge definiert:
  68.  
  69.    pattern     - Das Skript prüft, ob es in einem Brett aufgerufen wurde,
  70.                  dessen Name auf das hier definierte Muster paßt. Trifft
  71.                  dies zu, werden die weiteren Parameter genutzt.
  72.  
  73.    showfilesz  - Sollen Dateilängen angezeigt werden (1 = ja, 0 = nein)?
  74.  
  75.    showboards  - Sollen Brettnamen angezeigt werden?
  76.  
  77.    discard     - Bestimmt den Text, bis zu dem der Brettname abgeschnitten
  78.                  werden soll. Das Abschneiden erfolgt bei dem am weitesten
  79.                  rechts in Namen gefundenen Auftreten des Textes.
  80.  
  81.    showreadme  - Sollen #?.readme Dateien angezeigt werden?
  82.  
  83.    comments    - Sollen die Kurzkommentare angezeigt werden?
  84.  
  85.    boardnamesz - Anzahl der Zeichen pro Brettname.
  86.  
  87.    filenamesz  - Anzahl der Zeichen pro Dateiname.
  88.  
  89.    winwidth    - Gesamtbreite des Fensters in Pixeln.
  90. */
  91.  
  92.  
  93. mapsadr        = 'maps'
  94. maildemon    = 'Newfiles@#?'
  95. boardindex    = 'Re#?INHALT'
  96. requestcmd    = 'REQUEST'
  97. usebrackets    = 0
  98. msgidheader    = 'X-BIN-MSGID'
  99. boardheader    = 'X-BIN-BRETT'
  100.  
  101. /* 'board.count' gibt den Index der letzten definierten Parameterstruktur
  102.    an. Wenn Sie also als letzten Eintrag 'board.9.winwidth' benutzen, muß
  103.    die folgende Zeile in 'board.count = 9' geändert werden. */
  104.  
  105. board.count = 2
  106.  
  107. board.0.pattern        = '#?AMINET#?'    /* Parameter für Aminet-Bretter */
  108. board.0.showfilesz    = 1
  109. board.0.showboards    = 1
  110. board.0.discard        = 'AMINET/'    /* Entferne das führende 'AMINET/' */
  111. board.0.showreadme    = 0        /* von den Brettnamen. */
  112. board.0.showcomments    = 1
  113. board.0.boardnamesz    = 11
  114. board.0.filenamesz    = 20
  115. board.0.winwidth    = 813
  116.  
  117. board.1.pattern        = '#?/FAQ'    /* Parameter für FAQ-Bretter */
  118. board.1.showfilesz    = 1
  119. board.1.showboards    = 1
  120. board.1.discard        = ''
  121. board.1.showreadme    = 0
  122. board.1.showcomments    = 0
  123. board.1.boardnamesz    = 12
  124. board.1.filenamesz    = 60
  125. board.1.winwidth    = 813
  126.  
  127. board.2.pattern        = '#?'        /* Parameter für alle übrigen Bretter. */
  128. board.2.showfilesz    = 1        /* Der Eintrag für 'pattern' muß '#?' */
  129. board.2.showboards    = 1        /* lauten, ändern Sie das niemals! */
  130. board.2.discard        = ''
  131. board.2.showreadme    = 1
  132. board.2.showcomments    = 1
  133. board.2.boardnamesz    = 35
  134. board.2.filenamesz    = 30
  135. board.2.winwidth    = 813
  136.  
  137.  
  138. /********************************************************************/
  139. /*** !!! BITTE AENDERN SIE UNTERHALB DIESER ZEILE NICHTS MEHR !!! ***/
  140. /********************************************************************/
  141.  
  142. OPTIONS RESULTS
  143. OPTIONS FAILAT 20
  144.  
  145. IF (~SHOW('LIBRARIES', 'rexxtricks.library') & ~ADDLIB('rexxtricks.library', 0, -30, 0)) THEN DO
  146.     requestnotify 'Kann rexxtricks.library nicht öffnen!'
  147.     EXIT(5)
  148. END
  149.  
  150. IF (~SHOW('LIBRARIES','rexxsupport.library') & ~ADDLIB('rexxsupport.library', 0, -30, 0)) THEN DO
  151.     requestnotify 'Kann rexxsupport.library nicht öffnen!'
  152.     EXIT(5)
  153. END
  154.  
  155. rexxport = ADDRESS()
  156.  
  157. IF MATCHPATTERN(rexxport, "MICRODOT#?") THEN
  158.     md = 1
  159. ELSE
  160.     md = 0
  161.  
  162. IF md THEN
  163.     getmdpubscreenname var pubscreen
  164. ELSE DO
  165.     PARSE ARG rexxport
  166.     rexxport = COMPRESS(rexxport)
  167.     IF rexxport = '' THEN
  168.         rexxport = 'ZPoint'
  169.     ADDRESS VALUE rexxport
  170.     pubscreen = rexxport
  171. END
  172.  
  173. shortrequest = 0
  174.  
  175. IF md THEN DO
  176.     'getcurrentmailheader 'msgidheader' var msgid'
  177.     IF rc = 0 THEN DO
  178.         'getcurrentmailheader 'boardheader' var brett'
  179.         IF rc = 0 THEN
  180.             shortrequest = 1
  181.     END
  182. END
  183. ELSE DO
  184.     findheader msgidheader
  185.     msgid = RESULT
  186.     IF msgid ~= '-NONE-' THEN DO
  187.         findheader boardheader
  188.         brett = RESULT
  189.         IF msgid ~= '-NONE-' THEN
  190.             shortrequest = 1
  191.     END
  192. END
  193.  
  194.  
  195. IF shortrequest THEN DO
  196.  
  197.     IF LEFT(brett,1) = "/" THEN brett = DELSTR(brett,1,1)
  198.     IF md THEN DO
  199.         'sendshortmail 'mapsadr' "'brett msgid'" subject='requestcmd
  200.         IF RC = 0 THEN
  201.             'request "Nachricht > 'brett msgid' < bestellt" "Weiter"'
  202.     END
  203.     ELSE DO
  204.         tmp = 'T:3-RequestCL.zpmd'
  205.         address command 'echo >'tmp' "'brett' 'msgid'"'
  206.         writemessage 'file='tmp' receiver='mapsadr' subject='requestcmd
  207.         IF RESULT = '' THEN DO
  208.             requestnotify 'Kann Bestellung nicht verschicken!'
  209.             EXIT(5)
  210.         END
  211.     END
  212. END
  213.  
  214. ELSE DO
  215.  
  216.     IF md THEN DO
  217.         getcurrentboard stem brett.
  218.         boardname = brett.name
  219.     END
  220.     ELSE DO
  221.         boardinfo label
  222.         boardname = result
  223.     END
  224.  
  225.     disc = ''
  226.     DO i = 0 TO board.count
  227.         IF MATCHPATTERN(boardname, board.i.pattern) THEN DO
  228.             showfilesz    = board.i.showfilesz
  229.             showboards    = board.i.showboards
  230.             showreadme    = board.i.showreadme
  231.             showcomments    = board.i.showcomments
  232.             boardnamesz    = board.i.boardnamesz
  233.             filenamesz    = board.i.filenamesz
  234.             winwidth    = board.i.winwidth
  235.             disc        = board.i.discard
  236.             LEAVE i
  237.         END
  238.     END
  239.  
  240.     IF md THEN DO
  241.         getcurrentmailheader ABS var absender
  242.         getcurrentmailheader BET var betreff
  243.     END
  244.     ELSE DO
  245.         messageinfo author
  246.         absender = RESULT
  247.         messageinfo fullsubject
  248.         betreff = RESULT
  249.     END
  250.  
  251.     fromdemon = MATCHPATTERN(absender, maildemon)
  252.     IF (~fromdemon & ~MATCHPATTERN(betreff, boardindex)) THEN DO
  253.         IF md THEN DO
  254.             request '"Unbekanntes Nachrichtenformat!"' 'Schade'
  255.             EXIT(5)
  256.         END
  257.         ELSE DO
  258.             requestnotify 'Unbekanntes Nachrichtenformat!'
  259.             EXIT(5)
  260.         END
  261.     END
  262.  
  263.     inname    = 'T:1-RequestCL.zpmd'
  264.     outname    = 'T:2-RequestCL.zpmd'
  265.     IF md THEN DO
  266.         extractcurrentmail inname
  267.         IF RC THEN DO
  268.             request '"Kann Nachricht nicht speichern!"' 'Schade'
  269.             EXIT(5)
  270.         END
  271.     END
  272.     ELSE DO
  273.         savemessagebody inname
  274.         IF ~RC THEN DO
  275.             requestnotify 'Kann Nachricht nicht speichern!'
  276.             EXIT(5)
  277.         END
  278.     END
  279.  
  280.     IF ~READFILE(inname, 'line') THEN DO
  281.         IF md THEN
  282.             request '"Kann 'inname' nicht lesen!"' 'Schade'
  283.         ELSE
  284.             requestnotify 'Kann 'inname' nicht lesen!'
  285.         EXIT(5)
  286.     END
  287.  
  288.     IF ~md THEN
  289.         'guilock text="Bitte haben Sie Geduld..."'
  290.  
  291.     CALL ParseBody
  292.  
  293.     dummy = DELETE(inname)
  294.  
  295.     windef.pubscreen     = pubscreen
  296.     windef.title        = 'Zu bestellende Nachrichten auswählen'
  297.     windef.postext        = '_Bestellen'
  298.     windef.negtext        = '_Abbruch'
  299.     windef.sort        = 'TRUE'
  300.     windef.font        = 'DEFAULT'
  301.     windef.width        = winwidth
  302.     IF VIEWLIST('string', 'windef', 'destvar') THEN DO
  303.         IF ~OPEN('temp2', outname, 'WRITE') THEN DO
  304.             BEEP()
  305.             EXIT(5)
  306.         END
  307.         smail = 0
  308.         DO i = 0 TO destvar.count - 1
  309.             x = LSEARCH(destvar.i, 'string')
  310.             IF x ~= (-1) THEN DO
  311.                 dummy = WRITELN('temp2', entry.x)
  312.                 smail = 1
  313.             END
  314.         END
  315.         dummy = CLOSE('temp2')
  316.         IF smail THEN DO
  317.             IF md THEN DO
  318.                 sendmail 'to='mapsadr' bodyfile='outname' subject='requestcmd
  319.                 IF RESULT = '' THEN DO
  320.                     request '"Kann Bestellung nicht verschicken!"' 'Schade'
  321.                     EXIT(5)
  322.                 END
  323.             END
  324.             ELSE DO
  325.                 writemessage 'file='outname' receiver='mapsadr' subject='requestcmd
  326.                 IF RESULT = '' THEN DO
  327.                     requestnotify 'Kann Bestellung nicht verschicken!'
  328.                     EXIT(5)
  329.                 END
  330.             END
  331.         END
  332.         ELSE
  333.             dummy = DELETE(outname)
  334.     END
  335.  
  336.     IF ~md THEN
  337.         guilock off
  338.     EXIT(0)
  339.  
  340.  
  341.     /* Nachricht vom 'Mailer-Daemon' nach bestellbaren Files durchsuchen. */
  342.  
  343.     ParseBody:
  344.         mi = -1
  345.         entries = 0
  346.         DO i = 0 TO line.count - 1
  347.             IF i > mi THEN DO
  348.                 IF ((fromdemon & LEFT(line.i, 25) = 'Neue Nachrichten im Brett') | (~fromdemon & LEFT(line.i, 19) = '-- Inhalt von Brett')) THEN
  349.                     currentboard = LEFT(WORD(line.i, 5), LENGTH(WORD(line.i, 5)) - 1)
  350.                 IF DATATYPE(WORD(line.i, 3)) = 'NUM' THEN DO
  351.                     mi = 0;
  352.                     DO j = i + 2 UNTIL (mi > 0 | j >= line.count)
  353.                         IF WORD(line.j, 1) = '>Msg-ID:' THEN mi = j
  354.                     END
  355.                     IF mi = 0 THEN
  356.                         use = 0
  357.                     ELSE
  358.                         use = 1
  359.                     IF ~showreadme THEN
  360.                         IF MATCHPATTERN(line.i, '#?.readme#?') THEN
  361.                             use = 0
  362.                     IF use THEN DO
  363.                         mid = WORD(line.mi, 2)
  364.                         IF (~usebrackets & LEFT(mid, 1) = '<') THEN
  365.                             mid = SUBSTR(mid, 2, LENGTH(mid) - 2)
  366.                         entry.entries = currentboard' 'mid
  367.                         string.entries = SUBWORD(SUBSTR(line.i, 43), 1)
  368.                         comment = ''
  369.                         IF showcomments THEN
  370.                             DO j = i + 2 TO mi - 2
  371.                                 comment = comment' 'STRIP(SUBSTR(line.j, 43), 'T')
  372.                             END
  373.                         IF showfilesz THEN
  374.                             string.entries = LEFT(string.entries, filenamesz)' 'RIGHT(WORD(line.i, 3), 7)' 'comment
  375.                         IF showboards THEN DO
  376.                             tempboard = currentboard
  377.                             IF disc ~= '' THEN DO
  378.                                 pos = LASTPOS(disc, currentboard)
  379.                                 IF pos >= 1 THEN
  380.                                     tempboard = SUBSTR(currentboard, pos + LENGTH(disc))
  381.                             END
  382.                             string.entries = LEFT(tempboard, boardnamesz)' 'string.entries
  383.                         END
  384.                         entries = entries + 1
  385.                     END
  386.                 END
  387.             END
  388.         END
  389.         string.count = entries
  390.     RETURN
  391.  
  392. END
  393.  
  394. /* EOF */
  395.